package com.topvision.utils;

import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.SftpATTRS;
import com.jcraft.jsch.SftpException;

import java.io.InputStream;
import java.util.Map;

public class FtpUtil {

   public  static  ChannelSftp chSftp;
   public  static  SFTPChannel channel = new SFTPChannel();



    public static void initChannelSftp(Map<String, String> parammap){
        try {
            chSftp = channel.getChannel(parammap, 60000);
        } catch (JSchException e) {
            e.printStackTrace();
        }
    }

    /**
     *
     * @throws Exception
     */
    public static void upload(InputStream in, String dist, String dir) throws Exception {

        try {
            chSftp.ls(dir); //首先查看下目录，如果不存在，系统会被错，捕获这个错，生成新的目录。
        } catch (Exception e) {
            //  chSftp.mkdir(dir);
            createDir(dir);
        }

        chSftp.cd(dir);
        chSftp.put(in, dist, ChannelSftp.OVERWRITE); // 代码段3
       // chSftp.quit();
        in.close();
        channel.closeChannel();
    }


    /**
     * 创建一个文件目录
     */
    public static void createDir(String createpath) {
        try {
            if (isDirExist(createpath)) {
                chSftp.cd(createpath);
            }
            String pathArry[] = createpath.split("/");
            StringBuffer filePath = new StringBuffer("/");
            for (String path : pathArry) {
                if (path.equals("")) {
                    continue;
                }
                filePath.append(path + "/");
                if (isDirExist(filePath.toString())) {
                    chSftp.cd(filePath.toString());
                } else {
                    // 建立目录
                    chSftp.mkdir(filePath.toString());
                    // 进入并设置为当前目录
                    chSftp.cd(filePath.toString());
                }
            }
            chSftp.cd(createpath);
        } catch (SftpException e) {
            e.printStackTrace();
        }
    }


    /**
     * 判断目录是否存在
     */
    public static boolean isDirExist(String directory) {
        boolean isDirExistFlag = false;
        try {
            SftpATTRS sftpATTRS = chSftp.lstat(directory);
            isDirExistFlag = true;
            return sftpATTRS.isDir();
        } catch (Exception e) {
            if (e.getMessage().toLowerCase().equals("no such file")) {
                isDirExistFlag = false;
            }
        }
        return isDirExistFlag;
    }

    /**
     * 删除文件(使用前注意了,文件删除后不可恢复)
     *
     * @param directory  文件所在目录 例如:/data/bamboodata/portal_pic/item/
     * @param deleteFile 文件名 例如:S20150815113255214171.jpg
     * @throws Exception
     */
    public static void delete(String directory, String deleteFile) throws Exception {
        chSftp.cd(directory);
        chSftp.rm(deleteFile);
    }
}
